@@ -1111,6 +1111,11 @@ def member_activity_contribute_welfare_unlock(request, administrator):  | 
            ||
| 1111 | 1111 | 
                except MemberActivityContributionInfo.DoesNotExist:  | 
            
| 1112 | 1112 | 
                return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)  | 
            
| 1113 | 1113 | 
                 | 
            
| 1114 | 
                + try:  | 
            |
| 1115 | 
                + welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id, status=True)  | 
            |
| 1116 | 
                + except MemberActivityContributionWelfareInfo.DoesNotExist:  | 
            |
| 1117 | 
                + return response(MemberActivityContributionWelfareStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_NOT_FOUND)  | 
            |
| 1118 | 
                +  | 
            |
| 1114 | 1119 | 
                MemberActivityContributionWelfareUnlockingInfo.objects.create(  | 
            
| 1115 | 1120 | 
                brand_id=administrator.brand_id,  | 
            
| 1116 | 1121 | 
                admin_id=admin_id,  | 
            
                @@ -1118,6 +1123,8 @@ def member_activity_contribute_welfare_unlock(request, administrator):  | 
            ||
| 1118 | 1123 | 
                activity_id=contribution.activity_id,  | 
            
| 1119 | 1124 | 
                contribution_id=contribution_id,  | 
            
| 1120 | 1125 | 
                welfare_id=welfare_id,  | 
            
| 1126 | 
                + welfare_type=welfare.welfare_type,  | 
            |
| 1127 | 
                + welfare_value=welfare.welfare_value,  | 
            |
| 1121 | 1128 | 
                )  | 
            
| 1122 | 1129 | 
                 | 
            
| 1123 | 1130 | 
                return response(200, 'Unlock Member Activity Contribute Welfare Success', u'解锁会员活动投稿福利成功')  | 
            
                @@ -752,22 +752,22 @@ def activity_contribute_welfare_unlocking_handled(request):  | 
            ||
| 752 | 752 | 
                unlocking.is_handled = True  | 
            
| 753 | 753 | 
                unlocking.save()  | 
            
| 754 | 754 | 
                 | 
            
| 755 | 
                - # TODO: 积分相关逻辑在这里处理?  | 
            |
| 756 | 
                - try:  | 
            |
| 757 | 
                - user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)  | 
            |
| 758 | 
                - except UserInfo.DoesNotExist:  | 
            |
| 759 | 
                - return response(UserStatusCode.USER_NOT_FOUND)  | 
            |
| 755 | 
                + if unlocking.welfare_type == MemberActivityContributionWelfareUnlockingInfo.WELFARE_INTEGRAL:  | 
            |
| 756 | 
                + try:  | 
            |
| 757 | 
                + user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)  | 
            |
| 758 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 759 | 
                + return response(UserStatusCode.USER_NOT_FOUND)  | 
            |
| 760 | 760 | 
                 | 
            
| 761 | 
                - user.integral += unlocking.welfare_value  | 
            |
| 762 | 
                - user.save()  | 
            |
| 761 | 
                + user.integral += unlocking.welfare_value  | 
            |
| 762 | 
                + user.save()  | 
            |
| 763 | 763 | 
                 | 
            
| 764 | 
                - UserIntegralIncomeExpensesInfo.objects.create(  | 
            |
| 765 | 
                - brand_id=brand_id,  | 
            |
| 766 | 
                - user_id=user_id,  | 
            |
| 767 | 
                - integral_from=UserIntegralIncomeExpensesInfo.MEMBER_ACTIVITY_CONTRIBUTION_WELFARE,  | 
            |
| 768 | 
                - integral=unlocking.welfare_value,  | 
            |
| 769 | 
                - final_integral=user.integral,  | 
            |
| 770 | 
                - remark=unlocking.id,  | 
            |
| 771 | 
                - )  | 
            |
| 764 | 
                + UserIntegralIncomeExpensesInfo.objects.create(  | 
            |
| 765 | 
                + brand_id=brand_id,  | 
            |
| 766 | 
                + user_id=user_id,  | 
            |
| 767 | 
                + integral_from=UserIntegralIncomeExpensesInfo.MEMBER_ACTIVITY_CONTRIBUTION_WELFARE,  | 
            |
| 768 | 
                + integral=unlocking.welfare_value,  | 
            |
| 769 | 
                + final_integral=user.integral,  | 
            |
| 770 | 
                + remark=unlocking.id,  | 
            |
| 771 | 
                + )  | 
            |
| 772 | 772 | 
                 | 
            
| 773 | 773 | 
                return response(200, 'Update Member Activity Contribute Welfare Unblocking Success', u'处理会员活动投稿福利解锁成功')  | 
            
                @@ -110,7 +110,7 @@ class MemberActivityContributionWelfareInfoAdmin(admin.ModelAdmin):  | 
            ||
| 110 | 110 | 
                 | 
            
| 111 | 111 | 
                 | 
            
| 112 | 112 | 
                class MemberActivityContributionWelfareUnlockingInfoAdmin(admin.ModelAdmin):  | 
            
| 113 | 
                -    list_display = ('unlocking_id', 'admin_id', 'user_id', 'activity_id', 'contribution_id', 'welfare_id', 'welfare_value', 'name', 'phone', 'address', 'tracking_number', 'is_handled', 'status', 'created_at', 'updated_at')
               | 
            |
| 113 | 
                +    list_display = ('unlocking_id', 'admin_id', 'user_id', 'activity_id', 'contribution_id', 'welfare_id', 'welfare_type', 'welfare_value', 'name', 'phone', 'address', 'tracking_number', 'is_handled', 'status', 'created_at', 'updated_at')
               | 
            |
| 114 | 114 | 
                     list_filter = ('admin_id', 'activity_id', 'welfare_id', 'is_handled', 'status')
               | 
            
| 115 | 115 | 
                 | 
            
| 116 | 116 | 
                 | 
            
                @@ -0,0 +1,19 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +# Generated by Django 3.2.16 on 2022-10-27 10:46  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +from django.db import migrations, models  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +class Migration(migrations.Migration):  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                + dependencies = [  | 
            |
| 10 | 
                +        ('member', '0046_memberactivitycontributionwelfareunlockinginfo_welfare_value'),
               | 
            |
| 11 | 
                + ]  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                + operations = [  | 
            |
| 14 | 
                + migrations.AddField(  | 
            |
| 15 | 
                + model_name='memberactivitycontributionwelfareunlockinginfo',  | 
            |
| 16 | 
                + name='welfare_type',  | 
            |
| 17 | 
                + field=models.IntegerField(choices=[(0, '实物'), (1, '积分'), (2, '虚拟')], db_index=True, default=0, help_text='福利类型', verbose_name='welfare_type'),  | 
            |
| 18 | 
                + ),  | 
            |
| 19 | 
                + ]  | 
            
                @@ -795,6 +795,7 @@ class MemberActivityContributionWelfareInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 795 | 795 | 
                 | 
            
| 796 | 796 | 
                 | 
            
| 797 | 797 | 
                class MemberActivityContributionWelfareUnlockingInfo(BaseModelMixin, BrandInfoMixin):  | 
            
| 798 | 
                + WELFARE_INTEGRAL = 1  | 
            |
| 798 | 799 | 
                WELFARE_TYPE = (  | 
            
| 799 | 800 | 
                (0, u'实物'),  | 
            
| 800 | 801 | 
                (1, u'积分'),  | 
            
                @@ -811,6 +812,7 @@ class MemberActivityContributionWelfareUnlockingInfo(BaseModelMixin, BrandInfoMi  | 
            ||
| 811 | 812 | 
                contribution_id = models.CharField(_(u'contribution_id'), max_length=32, blank=True, null=True, help_text=u'投稿唯一标识', db_index=True)  | 
            
| 812 | 813 | 
                 | 
            
| 813 | 814 | 
                welfare_id = models.CharField(_(u'welfare_id'), max_length=32, blank=True, null=True, help_text=u'福利唯一标识', db_index=True)  | 
            
| 815 | 
                + welfare_type = models.IntegerField(_(u'welfare_type'), choices=WELFARE_TYPE, default=0, help_text=u'福利类型', db_index=True)  | 
            |
| 814 | 816 | 
                welfare_value = models.IntegerField(_(u'welfare_value'), default=0, help_text=_(u'福利数量'))  | 
            
| 815 | 817 | 
                 | 
            
| 816 | 818 | 
                name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')  |